if (ident_url_relatif(mov_url,curr_adr,curr_fil,mov_adr,mov_fil)>=0) {
// si non bouclage sur soi mΩme, ou si test avec GET non testΘ
if ((strcmp(mov_adr,curr_adr)) || (strcmp(mov_fil,curr_fil)) || (get_test_request==0)) {
// bouclage?
if ((!strcmp(mov_adr,curr_adr)) && (!strcmp(mov_fil,curr_fil)))
get_test_request=1; // faire requΦte avec GET
// recopier former_adr/fil?
if ((former_adr) && (former_fil)) {
if (strnotempty(former_adr)==0) { // Pas dΘja notΘ
strcpy(former_adr,curr_adr);
strcpy(former_fil,curr_fil);
}
}
// ftp: stop!
if (strfield(mov_url,"ftp://")) { // ftp, ok on arrΩte
has_been_moved = 1;
back_delete(back,b); // ok
strcpy(curr_adr,mov_adr);
strcpy(curr_fil,mov_fil);
} else {
char* methode;
if (!get_test_request)
methode=BACK_ADD_TEST; // tester avec HEAD
else {
methode=BACK_ADD_TEST2; // tester avec GET
if ( opt->errlog!=NULL ) {
fspc(opt->errlog,"warning"); fprintf(opt->errlog,"Loop with HEAD request (during prefetch) at %s%s"LF,curr_adr,curr_fil);
test_flush;
}
}
// Ajouter
if (back_add(back,back_max,opt,cache,mov_adr,mov_fil,methode,referer_adr,referer_fil,1,NULL)!=-1) { // OK
if ( (opt->debug>1) && (opt->errlog!=NULL) ) {
fspc(opt->errlog,"warning"); fprintf(opt->errlog,"(during prefetch) %s (%d) to link %s at %s%s"LF,back[b].r.msg,back[b].r.statuscode,back[b].r.location,curr_adr,curr_fil);
test_flush;
}
// libΘrer emplacement backing actuel et attendre le prochain
has_been_moved = 1; // sinon ne pas forcer has_been_moved car non dΘplacΘ
petits_tours++;
//
} else {// sinon on fait rien et on s'en va.. (ftp etc)
if ( (opt->debug>1) && (opt->errlog)) {
fspc(opt->errlog,"debug"); fprintf(opt->errlog,"Warning: Savename redirect backing error at %s%s"LF,mov_adr,mov_fil);
test_flush;
}
}
}
} else {
if ( opt->errlog!=NULL ) {
fspc(opt->errlog,"warning"); fprintf(opt->errlog,"Unable to test %s%s (loop to same filename)"LF,adr_complete,fil_complete);
test_flush;
}
}
}
}
} else{ // arrΩter les frais
if ( opt->errlog!=NULL ) {
fspc(opt->errlog,"warning"); fprintf(opt->errlog,"Unable to test %s%s (loop)"LF,adr_complete,fil_complete);
test_flush;
}
}
} // ok, leaving
}
} while(back[b].status>0);
// Si non dΘplacΘ, forcer type?
if (!has_been_moved) {
if (back[b].r.statuscode!=-10) { // erreur
if (strnotempty(back[b].r.contenttype)==0)
strcpy(back[b].r.contenttype,"text/html"); // message d'erreur en html
// Finalement on, renvoie un erreur, pour ne toucher α rien dans le code
// libΘrer emplacement backing
/*if (opt->errlog!=NULL) {
fspc(opt->errlog,0); fprintf(opt->errlog,"Error: (during prefetch) %s (%d) to link %s at %s%s"LF,back[b].r.msg,back[b].r.statuscode,back[b].r.location,curr_adr,curr_fil);
test_flush;
}
back_delete(back,b);
return -1; // ERREUR (404 par exemple)
*/
}
{ // pas d'erreur, changer type?
char s[16];
s[0]='\0';
if (strnotempty(back[b].r.cdispo)) { /* filename given */
ext_chg=2; /* change filename */
strcpy(ext,back[b].r.cdispo);
}
else if ((!may_unknown(back[b].r.contenttype)) || (!get_ext(back[b].url_fil)) ) { // on peut patcher α priori? (pas interdit ou pas de type)